﻿using System;
using System.Data;
using Litografia.BusinessEntities;

namespace Litografia.DataObjects
{
    public sealed class DOPuesto : DOBase
    {
        #region Declarations

        private const string GetSP = "puestoGet";
        private const string UpdateSP = "puestoUpdate";
        private const string DeleteSP = "puestoDelete";
        private const string AddSP = "puestoAdd";

        #endregion

        #region Methods: Public

        public static BEPuesto.PuestoDataTable Get(int empresaId)
        {
            var result = new BEPuesto();

            var command = DB.GetStoredProcCommand(GetSP);
            DB.AddInParameter(command, "@empresa_id", DbType.Int32, empresaId);
            var dataset = DB.ExecuteDataSet(command);

            // Pasa informacion hacia el BE
            if (dataset != null && dataset.Tables.Count > 0)
            {
                dataset.Tables[0].TableName = result.Tables[0].TableName;
                result.Merge(dataset);
                result.EnforceConstraints = true;
            }
            return result.Puesto;
        }
        public static void Update(BEPuesto.PuestoRow puesto)
        {
            var command = DB.GetStoredProcCommand(UpdateSP);
            DB.AddInParameter(command, "@id", DbType.Int32, puesto.Id);
            DB.AddInParameter(command, "@empresa_id", DbType.Int32, puesto.EmpresaId);
            DB.AddInParameter(command, "@nombre", DbType.String, puesto.Nombre);
            DB.ExecuteNonQuery(command);
        }
        public static void Add(BEPuesto.PuestoRow puesto)
        {
            var command = DB.GetStoredProcCommand(AddSP);
            DB.AddInParameter(command, "@empresa_id", DbType.Int32, puesto.EmpresaId);
            DB.AddInParameter(command, "@nombre", DbType.String, puesto.Nombre);
            DB.ExecuteNonQuery(command);
        }
        public static bool Delete(int id)
        {
            var command = DB.GetStoredProcCommand(DeleteSP);
            DB.AddInParameter(command, "@id", DbType.Int32, id);
            
            var result = DB.ExecuteScalar(command);
            if (DBNull.Value == result)
                throw new Exception("Se encontró un error inesperado al borrar el puesto");
            return Convert.ToBoolean(result);
        }

        #endregion
    }
}
